Skip to content
This repository has been archived by the owner on Sep 1, 2020. It is now read-only.

Latest commit

 

History

History
29 lines (22 loc) · 1.09 KB

2.8.3 - 是否可以共用1个redis或mysql连接.md

File metadata and controls

29 lines (22 loc) · 1.09 KB

是否可以共用1个redis或mysql连接

绝对不可以。必须每个进程单独创建RedisMySQLPDO连接,其他的存储客户端同样也是如此。原因是如果共用1个连接,那么返回的结果无法保证被哪个进程处理。持有连接的进程理论上都可以对这个连接进行读写,这样数据就发生错乱了。

所以在多个进程之间,一定不能共用连接

  • swoole_server中,应当在onWorkerStart中创建连接对象
  • swoole_process中,应当在swoole_process->start后,子进程的回调函数中创建连接对象
  • 本页面所述信息对使用pcntl_fork的程序同样有效

示例

$serv = new swoole_server("0.0.0.0", 9502);

//必须在onWorkerStart回调中创建redis/mysql连接
$serv->on('workerstart', function($serv, $id) {
    $redis = new redis;
	$redis->connect('127.0.0.1', 6379);
	$serv->redis = $redis;
});

$serv->on('receive', function (swoole_server $serv, $fd, $from_id, $data) {	
	$value = $serv->redis->get("key");
	$serv->send($fd, "Swoole: ".$value);
});

$serv->start();